#ifndef DBSERVICE_H
#define DBSERVICE_H

#include <QObject>
#include <QtSql>
#include <QJsonObject>

namespace DBServicePublic {
const char ONE_DAY[]      = "OneDay";
const char ONE_WEEK[]     = "OneWeek";
const char ONE_MONTH[]    = "OneMonth";
const char HALF_YEAR[]    = "HalfYear";
const char ONE_YEAR[]     = "OneYear";
const char CUSTOM_DATE[]  = "CustomDate";
const char TOPIC_NAME[]   = "TopicName";
}

class DBService : public QObject
{
    Q_OBJECT
public:
    ~DBService();
    static DBService* getInstance();
    static void releaseInstance();

    bool isConnect();

    /**
     * @brief insertData 插入数据
     * @param data 具体的数据
     * @return
     */
    bool insertData(const QJsonObject& data);

    // 查询数据
    /**
     * @brief searchData 查询数据
     * @param condition 查询条件  日期（开始-结束）、Topic 使用这两个条件查询
     * @param result 查询结果
     * @return 是否成功
     */
    bool searchData(const QJsonObject& condition, QJsonObject& result);

    /**
     * @brief createTable   创建表
     * @param tableName     表名
     * @param tableAttr     表属性
     * @return
     */
    bool createTable(const QString& tableName, const QJsonObject& tableAttr);

    /**
     * @brief connectDatabase 连接数据库
     */
    bool connectDatabase();

    /**
     * @brief disconnectDatabase 断开数据库连接
     * @return
     */
    bool disconnectDatabase();

signals:


private:
    DBService();

    static DBService* instance;

    /**
     * @brief isConnect 是否连接数据库
     */
    bool m_connect = false;

    /**
     * @brief m_db 数据库对象
     */
    QSqlDatabase m_db;

    /**
     * @brief m_query 查询对象
     */
    QSqlQuery m_query;
};

#endif // DBSERVICE_H
